package com.dk.config;

import org.apache.shiro.authc.*;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;

//自定义的登录授权类,继承AuthorizingRealm
public class LoginUserRealm extends AuthorizingRealm {


    //授权的方法
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
//        //动态授权,根据当前登陆的用户进行授权
//        TPerson person = (TPerson) SecurityUtils.getSubject().getPrincipal();
//        //根据当前用户的id查询权限字符串,放到下面的list中
//        List<String> perms = menuService.findPermissionByPid(person.getPid());
//        //授权
//        SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
//        simpleAuthorizationInfo.addStringPermissions(perms);
//        System.out.println("shiro的授权方法");
        return null;
    }

    //认证方法
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
        System.out.println("shiro的认证方法");
        //1.账号是否存在,用 authenticationToken 里面的方法来获取登陆者的信息
        UsernamePasswordToken token = (UsernamePasswordToken)authenticationToken;
        //这里获取的是登录用户填的账号/跟数据库里面对比,看有没有这个用户
//            TbUser user = tbUserService.login(token.getUsername());
        //判断用户名,为空就说明没有这个用户
//        if (user == null){
//            return null;
//        }
        //密码会自动判断.如果密码正确就登陆成功,错误就失败,需要将用户填写的密码传进去    密码校验的话需要在return new SimpleAuthenticationInfo("",pswd,"");
        //上再加上一个参数 pswd 这是密文(d913315613a88749e9ff38aafdce9c7d),ByteSource.Util.bytes(salt)这是盐,他会帮我们自动校验
//        return new SimpleAuthenticationInfo(user,user.getPassword(), ByteSource.Util.bytes(user.getSalt()),"");
        return null;
    }
}
